/**
 * Definiciones de las funciones mcd y mcm para arquitecturas
 * no MIPS. Según la regla del Makefile usada se usan estas
 * definiciones o las definiciones en assembly.
 */

#include <stdio.h>
#include "funciones.h"

#define MAX_INT (long long unsigned)4294967295

unsigned int mcd(unsigned int a, unsigned int b) {
    if (b == 0)
        return a;
    //Si a < b en la siguiente llamada se invierten
    return mcd(b, a % b);
}

unsigned int mcm(unsigned int a, unsigned int b) {
    unsigned d = mcd(a, b);

    if (d == 0)
        return ERROR;
    long long unsigned q = b / d;
    long long unsigned result = (long long unsigned)a * (long long unsigned)q;

    if ((int)result < 0 || result > MAX_INT)
        return OVERFLOW;
    return (unsigned)result;
}
